/*!
 * \file tcompact.h
 *
 * \brief thrift tcompact 数据编码格式解析
 *
 * All Rights Reserved Copyright (C) 2014 broada,Co.,Ltd.\n
 * 共通使用的宏和结构体
 *
 * \version 1.0
 * \author geyh
 * \date 2017/02/15
 *
 */

#ifndef APM_R4_TCOMPACT_H
#define APM_R4_TCOMPACT_H

#include <frreport_comm.h>
#include <frbyte_buffer.h>
#include <frreport_comm.h>

typedef struct __frtcompact
{
    int i_sqlid;
    short s_fieldid;
    uint8_t u8_type;
    uint8_t u8_version;
}FRTcompact;
/*!
 * \brief       thrift tcompact 协议格式判断
 *
 * \arg         p_tcp_body   输入数据
 *              ui_tcp_body_len     数据长度
 *
 * \return      APM_L7_IS_NO
 *              APM_L7_IS_YES
 *
 */
int frthrift_tcompact_detect(unsigned char *p_tcp_body, unsigned int ui_tcp_body_len);

/*!
 * \brief   判断thrift 数据方向
 *
 * \arg         p_tcp_body   输入数据
 *              ui_tcp_body_len     数据长度
 *
 * \return      FR_DIRECT_UNKNOWN
 *              FR_DIRECT_SRV2CLIENT
 *              FR_DIRECT_CLIENT2SRV
 *
 */
int frthrift_tcompact_direction_detect(unsigned char *p_tcp_body, unsigned int ui_tcp_body_len);

        
/*!
 * \brief       thrift tcompact 消息开始部分解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *              i_use_request       是否为请求数据
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_message_begin(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact, int i_use_request, char *p_prefix);

/*!
 * \brief       thrift tcompact 内容开始部分解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *              i_use_request       是否为请求数据
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_field_begin(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact,int i_use_request, char *p_prefix);
        
/*!
 * \brief       thrift tcompact struct 解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *              i_use_request       是否为请求数据
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_struct_begin(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact,int i_use_request, char *p_name);

/*!
 * \brief       thrift tcompact map 解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *              i_use_request       是否为请求数据
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_map_begin(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact,int i_use_request, char *p_name);

/*!
 * \brief       thrift tcompact list 解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *              i_use_request       是否为请求数据
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_list_begin(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact,int i_use_request, char *p_name);

/*!
 * \brief       thrift tcompact set 解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *              i_use_request       是否为请求数据
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_set_begin(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact,int i_use_request, char *p_name);

/*!
 * \brief       thrift tcompact boolean 解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *              i_use_request       是否为请求数据
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_bool_begin(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact,int i_use_request, char *p_name);

/*!
 * \brief       thrift tcompact byte 解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *              i_use_request       是否为请求数据
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_byte_begin(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact,int i_use_request, char *p_name);

/*!
 * \brief       thrift tcompact i16 解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *              i_use_request       是否为请求数据
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_i16_begin(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact,int i_use_request, char *p_name);

/*!
 * \brief       thrift tcompact i32 解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *              i_use_request       是否为请求数据
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_i32_begin(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact,int i_use_request, char *p_name);

/*!
 * \brief       thrift tcompact i64 解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *              i_use_request       是否为请求数据
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_i64_begin(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact,int i_use_request, char *p_name);

/*!
 * \brief       thrift tcompact double 解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *              i_use_request       是否为请求数据
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_double_begin(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact,int i_use_request, char *p_name);

/*!
 * \brief       thrift tcompact string 解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *              i_use_request       是否为请求数据
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_string_begin(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact,int i_use_request, char *p_name);

/*!
 * \brief       thrift tcompact string 解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *              i_use_request       是否为请求数据
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_binary_begin(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact,int i_use_request, char *p_name);

/*!
 * \brief       thrift tcompact request 解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_request(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact, char *p_prefix);

/*!
 * \brief       thrift tcompact response 解析
 *
 * \arg         p_packet            入力参数
 *              p_st_body_data      上报列表
 *              p_st_compact        tcompact 解析结构体
 *
 * \return      FR_SUCC
 *              FR_FAIL
 *
 */
int frthrift_tcompact_read_response(Frbyte_Packet *p_packet, Frreport_body_data *p_st_body_data
        , FRTcompact *p_st_compact, char *p_prefix);

#endif //APM_R4_TCOMPACT_H
